package com.ruoyi.water.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.water.domain.HourData;
import com.ruoyi.water.service.IHourDataService;
import com.ruoyi.water.service.impl.HourDataServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 小时数据处理控制器（仅负责请求响应，无业务逻辑）
 *
 * @author wujiong
 * @date 2025-09-15
 */
@RestController
@RequestMapping("/water/hourdata")
public class HourDataController extends BaseController {

    @Autowired
    private IHourDataService hourDataService;

    /**
     * 新增：查询小时数据列表（已移除对value的约束）
     */
    @PreAuthorize("@ss.hasPermi('water:hourdata:list')")
    @GetMapping("/list")
    public TableDataInfo list(
            HourData hourData, // 实体类参数
            @RequestParam(required = false) String startTime,
            @RequestParam(required = false) String endTime
    ) {
        startPage(); // 分页处理
        // 改为空的QueryWrapper，避免自动携带实体中的value等字段作为条件
        QueryWrapper<HourData> queryWrapper = new QueryWrapper<>();

        // 保留其他需要的字段约束（例如meterId，根据实际需求决定是否保留）
        if (hourData.getMeterId() != null) {
            queryWrapper.eq("meterId", hourData.getMeterId());
        }

        // 时间范围条件（保留）
        if (startTime != null) {
            queryWrapper.ge("valueTime", startTime);
        }
        if (endTime != null) {
            queryWrapper.le("valueTime", endTime);
        }

        // 按时间排序（保留）
        queryWrapper.orderByAsc("valueTime");

        List<HourData> list = hourDataService.list(queryWrapper);
        return getDataTable(list);
    }

    /**
     * 接收小时数据处理请求，调用Service处理
     */
    @PreAuthorize("@ss.hasPermi('water:hourdata:process')")
    @Log(title = "小时数据处理", businessType = BusinessType.UPDATE)
    @PostMapping("/process")
    public AjaxResult processHourData(
            @RequestParam(required = false) String startTime,
            @RequestParam(required = false) String endTime) {

        System.out.println("===== Controller接收请求 =====");
        System.out.println("请求参数：startTime=" + startTime + ", endTime=" + endTime);

        // 调用Service处理核心业务
        HourDataServiceImpl.HourDataProcessResult result = hourDataService.processHourData(startTime, endTime);

        // 构建响应
        if (result.getTotalToSave() == 0) {
            return AjaxResult.warn("未查询到符合条件的整点数据");
        }

        System.out.println("===== 请求处理完成 =====");
        return AjaxResult.success(
                String.format("小时数据处理完成，共生成%d条待插入记录，实际插入%d条，忽略重复%d条",
                        result.getTotalToSave(), result.getActualInserted(), result.getDuplicateCount()),
                result.getActualInserted()
        );
    }
}